iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
自我挑戰組

前端新手的學習筆記系列 第 20

Day20:每天一個小練習 - JS30-05-Flex Panels

  • 分享至 

  • xImage
  •  

練習資料:
Alex老師的教學
PJCHENder筆記


原始畫面
https://ithelp.ithome.com.tw/upload/images/20201004/20121534BFmwYppuyl.png
用CSS調整版面

.panels {
(略)
    display: flex;
}

.panel {
		display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    flex: 1;//每格1等分
(略)
}
.panel > * {
    margin: 0;
    width: 100%;
    transition: transform 0.5s;
    flex: 1;
    display: flex;//這3行是讓文字置中
    justify-content: center;
    align-items: center;
    &:first-child {
        transform: translateY(-100%);
    }
    &:last-child {
        transform: translateY(100%);
    }
}

調整後畫面
https://ithelp.ithome.com.tw/upload/images/20201004/20121534g8E2w5OMQh.png
加上JS

(function () {
    const panels = document.querySelectorAll('.panel'); //注意這不是陣列

    function clickHandler() {
        this.classList.toggle('open');
        // JQ : addClass / removeClass / toggleClass
        // JS : classList.add / classList.remove /classList.toggle 
    }

    panels.forEach(item => {
        item.addEventListener('click', clickHandler);
    })

})();

發現點擊後展開的寬度不夠,修改CSS

.panel.open {
    font-size: 40px;
    flex: 5; //依照需求修改
}

做第二段動畫

panels.forEach(item => {
        item.addEventListener('click', clickHandler);
        item.addEventListener('transitionend', transitionHandler); //第一段的動畫結束才觸發
    });
function transitionHandler(e) { //文字動畫
        console.log(e.propertyName);
        if (e.propertyName.indexOf('flex') !== -1) { //-1代表沒有找到
            this.classList.toggle('open-active');
        }
    }

點擊後沒有反應,需要回頭加上css

.panel.open-active > * {
    &:first-child {
        transform: translateY(0%);
    }
    &:last-child {
        transform: translateY(0%);
    }
}

完成畫面
https://ithelp.ithome.com.tw/upload/images/20201004/20121534WwClnIhEp6.png

連結
連結2


上一篇
Day19:每天一個小練習 - JS30-04-Array Cardio
下一篇
Day21:每天一個小練習 - JS30-06-Type Ahead
系列文
前端新手的學習筆記32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言